一、修改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也是不错的方法。
三、测试效果
四、有价值的参考文章