From e6ad74ade751c40e97a242d3ee45058860d13fa6 Mon Sep 17 00:00:00 2001 From: louzixuan Date: Mon, 22 Jul 2024 14:56:51 +0800 Subject: [PATCH] =?UTF-8?q?tabbar=E6=8A=98=E5=8F=A0=E5=B1=8F=E9=80=82?= =?UTF-8?q?=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: louzixuan --- .../main/java/org/hapjs/render/Display.java | 37 +++++++++++++++++++ .../main/java/org/hapjs/render/RootView.java | 8 ++++ .../main/java/org/hapjs/render/TabBar.java | 13 +++++++ 3 files changed, 58 insertions(+) diff --git a/core/runtime/android/runtime/src/main/java/org/hapjs/render/Display.java b/core/runtime/android/runtime/src/main/java/org/hapjs/render/Display.java index 7249009d..bb9054ae 100644 --- a/core/runtime/android/runtime/src/main/java/org/hapjs/render/Display.java +++ b/core/runtime/android/runtime/src/main/java/org/hapjs/render/Display.java @@ -144,6 +144,7 @@ public class Display implements ConfigurationManager.ConfigurationListener { private MenubarView.MenubarLifeCycleCallback mMenubarLifeCycleCallback = null; private String mTipsContent = ""; private int mTipsShowTime = MenubarView.MENUBAR_TIPS_SHOW_TIME_DURATION; + private boolean mIsLastFolding = false; public Display(DecorLayout decorLayout, Window window, Page page, RootView rootView) { mContext = decorLayout.getContext().getApplicationContext(); @@ -449,6 +450,9 @@ void setupStatusBar() { > BRIGHTNESS_THRESHOLD; break; } + if (isFoldableDevice(mContext)) { + mIsLastFolding = isFoldStatus(mContext); + } if (DarkThemeUtil.isDarkMode()) { lightStatusBar = false; } @@ -2041,11 +2045,44 @@ public View getStatusBarView() { @Override public void onConfigurationChanged(HapConfiguration newConfig) { + refreshOnFoldChange(newConfig); if (newConfig.getLastUiMode() != newConfig.getUiMode()) { setupStatusBar(); } } + private void refreshOnFoldChange(HapConfiguration newConfig) { + if (!isFoldableDevice(mContext)) { + return; + } + refreshTabBar(newConfig); + if (null != mContext + && null != mRootView + && mIsLastFolding != isFoldStatus(mContext)) { + setupOrientation(); + } + } + + private void refreshTabBar(HapConfiguration newConfig) { + if (isFoldableDevice(mContext) + && (mIsLastFolding != isFoldStatus(mContext) || (null != newConfig && + !isFoldStatus(mContext) && + newConfig.getLastOrientation() != newConfig.getOrientation())) + && null != mRootView) { + mRootView.refreshTabBar(); + } + } + + private boolean isFoldableDevice(Context context) { + SysOpProvider sysOpProvider = ProviderManager.getDefault().getProvider(SysOpProvider.NAME); + return sysOpProvider.isFoldableDevice(context); + } + + private boolean isFoldStatus(Context context) { + SysOpProvider sysOpProvider = ProviderManager.getDefault().getProvider(SysOpProvider.NAME); + return sysOpProvider.isFoldStatusByDisplay(context); + } + private static class ProgressBarController { private static final int MESSAGE_PROGRESS_UPDATE = 1; private static final int PROGRESS_UPDATE_TIME = 500; diff --git a/core/runtime/android/runtime/src/main/java/org/hapjs/render/RootView.java b/core/runtime/android/runtime/src/main/java/org/hapjs/render/RootView.java index 86ebd5ee..e25149c8 100755 --- a/core/runtime/android/runtime/src/main/java/org/hapjs/render/RootView.java +++ b/core/runtime/android/runtime/src/main/java/org/hapjs/render/RootView.java @@ -1505,6 +1505,14 @@ public boolean prepareTabBarPath(boolean isTabBarPage, String path) { return isValid; } + public void refreshTabBar() { + if (null != mTabBar && mTabBar.isTabBarViewValid()) { + mTabBar.refreshTabBar(this); + } else { + Log.w(TAG, "refreshTabBar mTabBar is null."); + } + } + @Override public void addView(View child, int index, ViewGroup.LayoutParams params) { super.addView(child, index, params); diff --git a/core/runtime/android/runtime/src/main/java/org/hapjs/render/TabBar.java b/core/runtime/android/runtime/src/main/java/org/hapjs/render/TabBar.java index 76372940..12df9bd4 100644 --- a/core/runtime/android/runtime/src/main/java/org/hapjs/render/TabBar.java +++ b/core/runtime/android/runtime/src/main/java/org/hapjs/render/TabBar.java @@ -74,6 +74,19 @@ public void initTabBarView(RootView rootView) { initTabBarList(context, rootView, mTabBarView, appInfo); } + public void refreshTabBar(RootView rootView) { + if (null != rootView && null != mTabBarView && mTabBarView.getVisibility() == View.VISIBLE) { + Context context = rootView.getContext(); + initTabBarList(context, rootView, mTabBarView, rootView.getAppInfo()); + } else { + Log.w(TAG, "refreshTabBar params is not valid."); + } + } + + public boolean isTabBarViewValid() { + return null != mTabBarView && mTabBarView.getVisibility() == View.VISIBLE; + } + public void updateTabBarData(RootView rootView, JSONObject tabbarData) { if (null == tabbarData || null == rootView) { Log.w(TAG, "updateTabBarData tabbarData or rootView is null.");