Android 12 动态控制状态栏的显示与隐藏功能

diff --git a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 8e52b0da54e..9dcf7de7cb4 100644
--- a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -34,6 +34,7 @@ import android.app.StatusBarManager.WindowType;
 import android.app.StatusBarManager.WindowVisibleState;
 import android.content.ComponentName;
 import android.content.Context;
+import android.view.View;
 import android.hardware.biometrics.BiometricAuthenticator.Modality;
 import android.hardware.biometrics.BiometricManager.BiometricMultiSensorMode;
 import android.hardware.biometrics.IBiometricSysuiReceiver;
@@ -47,6 +48,7 @@ import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
 import android.os.ParcelFileDescriptor;
+import android.provider.Settings;
 import android.util.Log;
 import android.util.Pair;
 import android.util.SparseArray;
@@ -170,6 +172,8 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
     private ProtoTracer mProtoTracer;
     private final @Nullable CommandRegistry mRegistry;
 
+    private Context mContext;
+
     /**
      * These methods are called back on the main thread.
      */
@@ -410,6 +414,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
         mProtoTracer = protoTracer;
         mRegistry = registry;
         context.getSystemService(DisplayManager.class).registerDisplayListener(this, mHandler);
+        mContext = context;
         // We always have default display.
         setDisabled(DEFAULT_DISPLAY, DISABLE_NONE, DISABLE2_NONE);
     }
@@ -436,9 +441,13 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
     public boolean panelsEnabled() {
         final int disabled1 = getDisabled1(DEFAULT_DISPLAY);
         final int disabled2 = getDisabled2(DEFAULT_DISPLAY);
         return (disabled1 & StatusBarManager.DISABLE_EXPAND) == 0
                 && (disabled2 & StatusBarManager.DISABLE2_NOTIFICATION_SHADE) == 0
-                && !ONLY_CORE_APPS;
+                && !ONLY_CORE_APPS
+                && Settings.System.getInt(mContext.getContentResolver(),
+                "hidestatusbar",0) == 0;
     }
 

//这段修改主要是对处于锁屏状态下从时间位置开始下滑,还是能够下拉出状态栏,做出的修改
diff --git a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
index 01ee666e8ae..2dda313156c 100644
--- a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
+++ b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
@@ -7,6 +7,7 @@ import android.animation.ValueAnimator
 import android.content.Context
 import android.content.res.Configuration
 import android.os.SystemClock
+import android.provider.Settings
 import android.util.DisplayMetrics
 import android.util.MathUtils
 import android.view.MotionEvent
@@ -22,6 +23,7 @@ import com.android.systemui.biometrics.UdfpsKeyguardViewController
 import com.android.systemui.classifier.Classifier
 import com.android.systemui.classifier.FalsingCollector
 import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.flags.FeatureFlags
 import com.android.systemui.media.MediaHierarchyManager
 import com.android.systemui.plugins.ActivityStarter.OnDismissAction
 import com.android.systemui.plugins.FalsingManager
@@ -40,7 +42,6 @@ import com.android.systemui.statusbar.phone.StatusBar
 import com.android.systemui.statusbar.policy.ConfigurationController
 import com.android.systemui.util.Utils
 import javax.inject.Inject
-import com.android.systemui.flags.FeatureFlags
 
 private const val SPRING_BACK_ANIMATION_LENGTH_MS = 375L
 private const val RUBBERBAND_FACTOR_STATIC = 0.15f
@@ -131,7 +132,7 @@ class LockscreenShadeTransitionController @Inject constructor(
     /**
      * The touch helper responsible for the drag down animation.
      */
-    val touchHelper = DragDownHelper(falsingManager, falsingCollector, this, context)
+    val touchHelper = DragDownHelper(statusBarStateController,falsingManager, falsingCollector, this, context)
 
     init {
         updateResources()
@@ -556,6 +557,7 @@ class LockscreenShadeTransitionController @Inject constructor(
  * the notification where the drag started.
  */
 class DragDownHelper(
+    private val statusBarStateController: SysuiStatusBarStateController,
     private val falsingManager: FalsingManager,
     private val falsingCollector: FalsingCollector,
     private val dragDownCallback: LockscreenShadeTransitionController,
@@ -565,6 +567,7 @@ class DragDownHelper(
     private var dragDownAmountOnStart = 0.0f
     lateinit var expandCallback: ExpandHelper.Callback
     lateinit var host: View
+    private var mContext = context;
 
     private var minDragDistance = 0
     private var initialTouchX = 0f
@@ -622,6 +625,19 @@ class DragDownHelper(
                 else
                     touchSlop
                 if (h > touchSlop && h > Math.abs(x - initialTouchX)) {
+                if (Settings.System.getInt(
+                        mContext.contentResolver,
+                        "hidestatusbar", 0
+                    ) != 0) {
+                    if (statusBarStateController.state == StatusBarState.KEYGUARD) {
+                        return true
+                    }
+                }
                     falsingCollector.onNotificationStartDraggingDown()
                     isDraggingDown = true
                     captureStartingChild(initialTouchX, initialTouchY)
diff --git a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
index 903b17cfdf5..654224e19c8 100644
--- a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
+++ b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
@@ -2202,6 +2202,14 @@ public class NotificationPanelViewController extends PanelViewController {
     }
 
     private void setQsExpansion(float height) {
+        if (Settings.System.getInt(mView.getContext().getContentResolver(),"hidestatusbar",0) != 0){
+            if(mStatusBarStateController.getState() != StatusBarState.SHADE){
+                return;
+            }
+        }
         height = Math.min(Math.max(height, mQsMinExpansionHeight), mQsMaxExpansionHeight);
         mQsFullyExpanded = height == mQsMaxExpansionHeight && mQsMaxExpansionHeight != 0;
         if (height > mQsMinExpansionHeight && !mQsExpanded && !mStackScrollerOverscrolling
diff --git a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
index 41eda00257c..07acc525a9c 100644
--- a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
+++ b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@@ -25,6 +25,7 @@ import android.content.Context;
 import android.content.res.Configuration;
 import android.graphics.Point;
 import android.graphics.Rect;
+import android.provider.Settings;
 import android.util.AttributeSet;
 import android.util.EventLog;
 import android.util.Pair;
@@ -226,6 +227,11 @@ public class PhoneStatusBarView extends PanelBar {
 
     @Override
     public boolean onTouchEvent(MotionEvent event) {
+        if(Settings.System.getInt(mContext.getContentResolver(), "hidestatusbar",0)!=0){
+            return false;
+        }
         boolean barConsumedEvent = mBar.interceptTouchEvent(event);
 
         if (DEBUG_GESTURES) {
diff --git a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 756d4d9ee2c..39208850fbd 100644
--- a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -332,6 +332,7 @@ public class StatusBar extends SystemUI implements DemoMode,
      */
     private static final int HINT_RESET_DELAY_MS = 1200;
 
+
     private static final AudioAttributes VIBRATION_ATTRIBUTES = new AudioAttributes.Builder()
             .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
             .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
@@ -346,6 +347,11 @@ public class StatusBar extends SystemUI implements DemoMode,
     public static final int[] CAMERA_LAUNCH_GESTURE_VIBRATION_AMPLITUDES =
             new int[]{39, 82, 139, 213, 0, 127};
    
+    private static final String ACTION_HIDE_STATUS_BAR = "android.intent.action.HIDE_STATUS_BAR";
+    private static final String ACTION_SHOW_STATUS_BAR = "android.intent.action.DISPLAY_STATUS_BAR";

     /**
      * If true, the system is in the half-boot-to-decryption-screen state.
      * Prudently disable QS and notifications.
@@ -361,6 +367,7 @@ public class StatusBar extends SystemUI implements DemoMode,
     private OpSystemUICustomizationFactoryBase mSystemUIFactoryBase = null;
     ///@}
 
+
     static {
         boolean onlyCoreApps;
         try {
@@ -990,7 +997,11 @@ public class StatusBar extends SystemUI implements DemoMode,
         }
 
         createAndAddWindows(result);

+        if (!(Settings.System.getInt(mContext.getContentResolver(),"hidestatusbar",0) == 0)){
+            mStatusBarWindowController.setBarVisibility(View.GONE);
+        }
         if (mWallpaperSupported) {
             // Make sure we always have the most current wallpaper info.
             IntentFilter wallpaperChangedFilter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED);
@@ -1141,6 +1152,8 @@ public class StatusBar extends SystemUI implements DemoMode,
         mStackScrollerController =
                 mNotificationPanelViewController.getNotificationStackScrollLayoutController();
         mStackScroller = mStackScrollerController.getView();

         NotificationListContainer notifListContainer =
                 mStackScrollerController.getNotificationListContainer();
         mNotificationLogger.setUpWithContainer(notifListContainer);
@@ -1445,11 +1458,16 @@ public class StatusBar extends SystemUI implements DemoMode,
 
     @VisibleForTesting
     protected void registerBroadcastReceiver() {
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
         filter.addAction(Intent.ACTION_SCREEN_OFF);
+        filter.addAction(ACTION_HIDE_STATUS_BAR);
+        filter.addAction(ACTION_SHOW_STATUS_BAR);
         filter.addAction(DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG);
+
         mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter, null, UserHandle.ALL);
     }
 
     protected QS createDefaultQSFragment() {
@@ -3141,7 +3159,19 @@ public class StatusBar extends SystemUI implements DemoMode,
             }
             else if (DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG.equals(action)) {
                 mQSPanelController.showDeviceMonitoringDialog();
+            }
+            else if (ACTION_HIDE_STATUS_BAR.equals(action)) {
+                mStatusBarWindowController.setBarVisibility(View.GONE);
+                Log.d(TAG,"ACTION_HIDE_STATUS_BAR");
+                Settings.System.putInt(mContext.getContentResolver(),"hidestatusbar",1);
+            }
+            else if (ACTION_SHOW_STATUS_BAR.equals(action)) {
+                mStatusBarWindowController.setBarVisibility(View.VISIBLE);
+                Log.d(TAG,"ACTION_SHOW_STATUS_BAR");
+                Settings.System.putInt(mContext.getContentResolver(),"hidestatusbar",0);
             }
             Trace.endSection();
         }
     };
diff --git a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java
index 9a25a707885..35f7b87b993 100644
--- a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java
+++ b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java
@@ -214,4 +214,9 @@ public class StatusBarWindowController {
             mLpChanged.privateFlags &= ~PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR;
         }
     }
+    public void setBarVisibility(int visibility) {
+        mStatusBarView.setVisibility(visibility);
+    }
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 随着移动设备的普及,越来越多的人开始使用android系统的手机或平板电脑。然而,很多人对于android系统自带的状态栏布局并不满意,这时候我们就需要一款android状态栏沉浸软件来改善这种情况。 简单来讲,android状态栏沉浸软件可以让用户将原本系统自带的状态栏隐藏起来,使屏幕更加纯净简洁。同时,用户可以根据自己的喜好自定义状态栏的背景颜色、透明度、图标等一系列属性。这种软件能够让用户在使用手机或平板电脑时拥有更好的使用体验,同时提高了屏幕的利用率。 值得一提的是,android状态栏沉浸软件在不同的手机品牌和系统版本下可能会存在兼容性问题,所以在选择使用前最好先查询一下相关的使用教程和注意事项。 总之,android状态栏沉浸软件是一款非常实用的软件,可以提升用户的使用体验和工作效率,如果你想要获得更好的屏幕展示效果,那么不妨尝试一下这种软件。 ### 回答2: Android 状态栏沉浸软件是一种让用户可以自定义和优化 Android 系统状态栏显示方式的工具。在大多数 Android 设备上,状态栏是一个固定的元素,通常显示设备的时间、电量、信号和通知等信息,占据屏幕的顶部。然而,有些用户希望将应用程序占用的可用空间最大化,因此状态栏可能会显得有些碍眼。同时,一些用户喜欢自定义外观,以便与自己设备的主题相匹配。 Android 状态栏沉浸软件通过隐藏或重定义状态栏,增加了屏幕的可用空间。例如,可以让状态栏完全消失,节省了顶部的宝贵空间。或者,也可以选择改变状态栏的颜色以配合设备的主题,这样便于与屏幕的其他元素相协调。 除了可用屏幕空间和外观之外,状态栏沉浸软件还可以在阅读、视频观看或游戏等场景中提供更佳的用户体验。正如人们不喜欢在大屏幕电视上看影片时在底部或顶部看到那些控制按钮一样,手机屏幕也将会受到相同的影响。当状态栏隐藏后,用户可以获得更清晰的视觉体验。 总的来说,Android 状态栏沉浸软件为用户提供了更好的自定义体验,同时也更增加了屏幕显示效果。无论是为优化手机的可用空间,还是为了更好的视觉体验,它都是一种非常有用的工具。 ### 回答3: Android状态栏沉浸模式是一种让应用程序能够使用全屏显示功能。传统的Android状态栏会出现在屏幕最上方,占用屏幕的一部分,导致应用程序无法使用整个屏幕。当一个应用程序启用状态栏沉浸模式时,系统的状态栏会被隐藏,使应用程序能够使用整个屏幕。 有很多现有的Android状态栏沉浸软件,让你能够启用这个功能,例如SystemUI Tuner、SetEdit等。这些软件有不同的设置选项,可以供用户选择。 对于程序员来说,他们也可以利用Android的API来实现沉浸模式。这需要他们在代码中添加一些指令,以告诉Android系统如何隐藏状态栏。不过这对一般用户来说,可能会比较困难。 总的来说,状态栏沉浸软件可以让用户在使用应用程序时,是能够看到更多的内容。这种功能通常更适合用于娱乐和游戏,而非日常使用。切记使用状态栏沉浸模式,需要注意不要被短信,来电等信息所打扰。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值