瑞芯微 android12 源码修改,可以通过广播控制导航栏、状态栏的隐藏显示

25 阅读2分钟

实现此功能,修改的是systemui;下方是git diff的内容

diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
index 720afe24c5..86214e83df 100644
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
@@ -205,7 +205,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,

     private Bundle mSavedState;
     private NavigationBarView mNavigationBarView;
-    private NavigationBarFrame mFrame;
+    public NavigationBarFrame mFrame;

     private @WindowVisibleState int mNavigationBarWindowState = WINDOW_STATE_SHOWING;

diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
index a984974c6b..ead1de280c 100644
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
@@ -147,6 +147,24 @@ public class NavigationBarController implements
         }
     }

+    public void hide(int displayId){
+        Log.e("status_bar","2222");
+        NavigationBar bar = mNavigationBars.get(displayId);
+        if(bar != null){
+             Log.e("status_bar","2222");
+            bar.mFrame.setVisibility(View.GONE);
+        }
+    }
+    public void show(int displayId){
+         Log.e("status_bar","333");
+        NavigationBar bar = mNavigationBars.get(displayId);
+        if(bar != null){
+             Log.e("status_bar","4444");
+            bar.mFrame.setVisibility(View.VISIBLE);
+        }
+    }
+
+
     @Override
     public void onNavigationModeChanged(int mode) {
         if (mNavMode == mode) {
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index a6fb317cdf..0367650fe7 100644
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -917,6 +917,36 @@ public class StatusBar extends SystemUI implements
                 id -> onLaunchTransitionTimeout());
     }

+     private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if("hide_status".equals(action)){
+                Log.e("status_bar","hide_status");
+                if(mStatusBarWindowController != null){
+                    mStatusBarWindowController.hide();
+                }
+                if(mNavigationBarController != null){
+                     Log.e("status_bar","hide_status111");
+                    mNavigationBarController.hide(mDisplayId);
+                }
+                // getNavigationBarView().setVisibility(View.GONE);
+
+            }else if("show_status".equals(action)){
+                Log.e("status_bar","show_status");
+                 if(mStatusBarWindowController != null){
+                    mStatusBarWindowController.show();
+                }
+                if(mNavigationBarController != null){
+                    mNavigationBarController.show(mDisplayId);
+                }
+                 // mNavigationBarController.createNavigationBars(true /* includeDefaultDisplay */, result);
+                 // getNavigationBarView().setVisibility(View.VISIBLE);
+
+            }
+        }
+    };
+
     @Override
     public void start() {
         mScreenLifecycle.addObserver(mScreenObserver);
@@ -997,6 +1027,10 @@ public class StatusBar extends SystemUI implements
             mCommandQueue.setIcon(result.mIcons.keyAt(i), result.mIcons.valueAt(i));
         }

+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction("hide_status");
+        intentFilter.addAction("show_status");
+        mContext.registerReceiver(mReceiver,intentFilter );

         if (DEBUG) {
             Log.d(TAG, String.format(
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java
index 85a6cd224b..bff17b6b46 100644
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java
@@ -119,6 +119,14 @@ public class StatusBarWindowController {
         if (DEBUG) Log.v(TAG, "defineSlots");
     }

+    public void show(){
+         mStatusBarWindowView.setVisibility(View.VISIBLE);
+    }
+
+
+    public void hide(){
+        mStatusBarWindowView.setVisibility(View.GONE);
+    }
     /**
      * Adds the status bar view to the window manager.
      */
@@ -127,7 +135,6 @@ public class StatusBarWindowController {
         // translucent backdrop, the entire thing is made TRANSLUCENT and is
         // hardware-accelerated.
         mLp = getBarLayoutParams(mContext.getDisplay().getRotation());
-
         mWindowManager.addView(mStatusBarWindowView, mLp);
         mLpChanged.copyFrom(mLp);