2022-08-19 AndroidR 实现根据触摸状态动态显示隐藏状态栏

一、修改systemui,处理触摸消息,发从广播,接收广播后显示或者隐藏状态栏。

diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
old mode 100644
new mode 100755
index f125b7d..1a9718c
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -1099,7 +1099,11 @@ public class StatusBar extends SystemUI implements DemoMode,
         mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager);
         mNotificationLogger.setHeadsUpManager(mHeadsUpManager);
 
-        createNavigationBar(result);
+		if(SystemProperties.getBoolean("persist.topdon.Navigation", true))
+           createNavigationBar(result);
+
+        if(!SystemProperties.getBoolean("persist.topdon.statusbar", true))
+          mPhoneStatusBarWindow.setVisibility(View.GONE);
 
         if (ENABLE_LOCKSCREEN_WALLPAPER && mWallpaperSupported) {
             mLockscreenWallpaper = mLockscreenWallpaperLazy.get();
@@ -1287,6 +1291,8 @@ public class StatusBar extends SystemUI implements DemoMode,
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
         filter.addAction(Intent.ACTION_SCREEN_OFF);
+		filter.addAction("user.show.bar");
+		filter.addAction("user.hide.bar");
         filter.addAction(DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG);
         mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter, null, UserHandle.ALL);
     }
@@ -2801,7 +2807,16 @@ public class StatusBar extends SystemUI implements DemoMode,
                 }
                 finishBarAnimations();
                 resetUserExpandedStates();
-            }
+            }else if ("user.show.bar".equals(action)){
+				 Log.v(TAG, "BroadcastReceiver user.show.bar ");
+				 mPhoneStatusBarWindow.setVisibility(View.VISIBLE);
+				 
+			}else if ("user.hide.bar".equals(action))	
+				{
+				  mPhoneStatusBarWindow.setVisibility(View.GONE);
+				  Log.v(TAG, "BroadcastReceiver user.hide.bar");
+				}
+
             else if (DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG.equals(action)) {
                 mQSPanel.showDeviceMonitoringDialog();
             }
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
old mode 100644
new mode 100755
index 29881cc..7d5f5ce
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -260,6 +260,7 @@ public class DisplayPolicy {
     private final DisplayContent mDisplayContent;
     private final Object mLock;
     private final Handler mHandler;
+	public final Handler mShowBarHandler;
 
     private Resources mCurrentUserResources;
 
@@ -520,6 +521,24 @@ public class DisplayPolicy {
 
         final Looper looper = UiThread.getHandler().getLooper();
         mHandler = new PolicyHandler(looper);
+		
+	    mShowBarHandler = new Handler() {
+			public void handleMessage(Message msg) {
+				Slog.i(TAG, "mShowBarHandler handleMessage msg.what:" + msg.what);
+				switch(msg.what){
+				case 1:
+						Intent showbar = new Intent("user.show.bar");
+                        mContext.sendBroadcast(showbar);
+					break;
+				case 2:
+						Intent hidebar = new Intent("user.hide.bar");
+                        mContext.sendBroadcast(hidebar);
+					break;
+				default:
+					break;
+				}
+		   }
+		};
         mSystemGestures = new SystemGesturesPointerEventListener(mContext, mHandler,
                 new SystemGesturesPointerEventListener.Callbacks() {
                     @Override
@@ -597,6 +616,9 @@ public class DisplayPolicy {
 
                     @Override
                     public void onDown() {
+                        Slog.w(TAG, "onDown ");
+						mShowBarHandler.removeMessages(2);
+						mShowBarHandler.sendEmptyMessageDelayed(1,500);
                         final WindowOrientationListener listener = getOrientationListener();
                         if (listener != null) {
                             listener.onTouchStart();
@@ -605,6 +627,8 @@ public class DisplayPolicy {
 
                     @Override
                     public void onUpOrCancel() {
+                        Slog.w(TAG, "onUpOrCancel ");
+					    mShowBarHandler.sendEmptyMessageDelayed(2,5000);
                         final WindowOrientationListener listener = getOrientationListener();
                         if (listener != null) {
                             listener.onTouchEnd();

二、上面的有个小问题,手指触摸后显示状态栏后整个布局会很快就会改变,如果是滑动的时候感觉体验上不是很好,上面我是用延时的方法处理。但是我现在觉得手指移动开后再显示bar也是不错的方法。

三、测试效果

四、有价值的参考文章

RK Android 11 Framework 修改记录 (二) 永久显示/隐藏导航栏 状态栏 - 知乎

猜你喜欢

转载自blog.csdn.net/qq_37858386/article/details/126431145
今日推荐