1.上滑显示导航栏,下滑隐藏导航栏。
修改以下类代码
修改: base/core/java/com/android/internal/statusbar/IStatusBar.aidl
修改: base/core/java/com/android/internal/statusbar/IStatusBarService.aidl
修改: base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
修改: base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
修改: base/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
修改: base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
修改: base/policy/src/com/android/internal/policy/impl/SystemGesturesPointerEventListener.java
修改: base/services/java/com/android/server/StatusBarManagerService.java
base/core/java/com/android/internal/statusbar/IStatusBar.aidl
void preloadRecentApps();
void cancelPreloadRecentApps();
void setWindowState(int window, int state);
+ //laixianfu add
+ void showNavigationBar();
+ void hideNavigationBar();
}
base/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -52,4 +52,10 @@ interface IStatusBarService
void preloadRecentApps();
void cancelPreloadRecentApps();
void setWindowState(int window, int state);
+ //laixianfu add
+ void showNavigationBar();
+ void hideNavigationBar();
}
base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -24,7 +24,7 @@ import android.service.notification.StatusBarNotification;
import com.android.internal.statusbar.IStatusBar;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.internal.statusbar.StatusBarIconList;
+import android.util.Log;
/**
* This class takes the functions from IStatusBar that come in on
* binder pool threads and posts messages to get them onto the main
@@ -33,6 +33,7 @@ import com.android.internal.statusbar.StatusBarIconList;
* are coalesced, note that they are all idempotent.
*/
public class CommandQueue extends IStatusBar.Stub {
+
private static final int INDEX_MASK = 0xffff;
private static final int MSG_SHIFT = 16;
private static final int MSG_MASK = 0xffff << MSG_SHIFT;
@@ -63,7 +64,10 @@ public class CommandQueue extends IStatusBar.Stub {
public static final int FLAG_EXCLUDE_NOTIFICATION_PANEL = 1 << 2;
public static final int FLAG_EXCLUDE_INPUT_METHODS_PANEL = 1 << 3;
public static final int FLAG_EXCLUDE_COMPAT_MODE_PANEL = 1 << 4;
+ //add by laixianfu
+ private static final int MSG_SHOW_NAVIGATIONBAR = 24 << MSG_SHIFT;
+ private static final int MSG_HIDE_NAVIGATIONBAR = 25 << MSG_SHIFT;
+ //end
private StatusBarIconList mList;
private Callbacks mCallbacks;
private Handler mHandler = new H();
@@ -98,6 +102,9 @@ public class CommandQueue extends IStatusBar.Stub {
public void hideSearchPanel();
public void cancelPreloadRecentApps();
public void setWindowState(int window, int state);
+ //add laixianfu
+ public void showNavigationBar();
+ public void hideNavigationBar();
}
public CommandQueue(Callbacks callbacks, StatusBarIconList list) {
@@ -232,6 +239,23 @@ public class CommandQueue extends IStatusBar.Stub {
}
}
+ //add by laixianfu 2018-09-23
+ public void showNavigationBar() {
+ synchronized (mList) {
+ mHandler.removeMessages(MSG_SHOW_NAVIGATIONBAR);
+ mHandler.sendEmptyMessage(MSG_SHOW_NAVIGATIONBAR);
+ android.util.Log.i("laixianfu", "CommandQueue.showNavigationBar...");
+ }
+ }
+
+ public void hideNavigationBar() {
+ synchronized (mList) {
+ mHandler.removeMessages(MSG_HIDE_NAVIGATIONBAR);
+ mHandler.sendEmptyMessage(MSG_HIDE_NAVIGATIONBAR);
+ android.util.Log.i("laixianfu", "CommandQueue.hideNavigationBar...");
+ }
+ }
+
private final class H extends Handler {
public void handleMessage(Message msg) {
final int what = msg.what & MSG_MASK;
@@ -312,6 +336,16 @@ public class CommandQueue extends IStatusBar.Stub {
case MSG_SET_WINDOW_STATE:
mCallbacks.setWindowState(msg.arg1, msg.arg2);
break;
+ // add by laixianfu
+ case MSG_SHOW_NAVIGATIONBAR:
+ mCallbacks.showNavigationBar();
+ android.util.Log.i("laixianfu", "mCallbacks.showNavigationBar();...");
+ break;
+ case MSG_HIDE_NAVIGATIONBAR:
+ mCallbacks.hideNavigationBar();
+ android.util.Log.i("laixianfu", "mCallbacks.hideNavigationBar();...");
+ break;
+ // end
}
}
}
/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -111,7 +111,7 @@ import java.util.ArrayList;
import android.os.SystemProperties; //zhangxiao add
import android.os.BatteryManager; //zhangxiao add
-
+import com.android.systemui.recent.RecentsActivity;
public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
private static TextView mBatteryLevel; //zhangxiao add
@@ -3031,4 +3031,70 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
mSettingsContainer.onConfigurationChanged(newConfig);
}
}
+ //laixianfu add 网山找的
+ /*
+ @Override // CommandQueue
+ public void showNavigationBar() {//add by jon
+ Log.v("laixianfu","phoneStatusBar showNavigationBar");
+ if (null != mNavigationBarView) {
+ return;
+ } else {
+ Log.v("laixianfu","phoneStatusBar....show......else");
+ final Context contex=mContext;
+ int layoutId = R.layout.navigation_bar;
+ /* if(RecentsActivity.FLOAT_WINDOW_SUPPORT){
+ layoutId = R.layout.navigation_bar_float_window;
+ } /// @} *
+ mNavigationBarView = (NavigationBarView) View.inflate(contex,layoutId, null);
+ mNavigationBarView.setDisabledFlags(mDisabled);
+ mNavigationBarView.setBar(this);
+ mNavigationBarView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ checkUserAutohide(v, event);
+ return false;
+ }
+ });
+ addNavigationBar();
+ }
+ }
+ */
+ //add by laixianfu
+ @Override
+ public void showNavigationBar() {
+ Log.d("laixianfu", "show NavigationBar +");
+ if (mNavigationBarView != null) return;
+ try {
+ boolean showNav = mWindowManagerService.hasNavigationBar();
+ /// M: Support Smartbook Feature.
+ if (true) Log.v("laixianfu", "hasNavigationBar=" + showNav);
+ if (showNav) {
+ mNavigationBarView =
+ (NavigationBarView) View.inflate(mContext, R.layout.navigation_bar, null);
+
+ mNavigationBarView.setDisabledFlags(mDisabled);
+ mNavigationBarView.setBar(this);
+ mNavigationBarView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ checkUserAutohide(v, event);
+ return false;
+ }});
+ }
+ } catch (RemoteException ex) {
+ // no window manager? good luck with that
+ }
+ addNavigationBar();
+ }
+
+ @Override
+ public void hideNavigationBar() {
+ Log.d("laixianfu", "hide +");
+ if (mNavigationBarView != null) {
+ mNavigationBarView.setVisibility(View.GONE);
+ mWindowManager.removeViewImmediate(mNavigationBarView);
+ mNavigationBarView = null;
+ }
+ }
+
}
b/base/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
@@ -147,5 +147,14 @@ public class TvStatusBar extends BaseStatusBar {
@Override
protected void refreshLayout(int layoutDirection) {
}
+
+ @Override // laixianfu
+ public void showNavigationBar() {
+ }
+
+ @Override // laixianfu
+ public void hideNavigationBar() {
+ }
+//
}
/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -974,6 +975,16 @@ public class PhoneWindowManager implements WindowManagerPolicy {
if (mNavigationBar != null && mNavigationBarOnBottom) {
requestTransientBars(mNavigationBar);
}
+ Log.i("laixianfu","onSwipeFrom...");
+ showNavigationBar();
+ }
+ @Override
+ public void onSwipeFromBarTop() {
+ if (mStatusBar != null) {
+ requestTransientBars(mStatusBar);
+ }
+ Log.i("laixianfu", "onSwipeFromBarTop...");
+ hideNavigationBar();
}
@Override
public void onSwipeFromRight() {
@@ -1017,6 +1028,41 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
+ //add by laixianfu to 2016-09-23
+ public void showNavigationBar(){
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ IStatusBarService service = getStatusBarService();
+ if (service != null) {
+ try {
+ Log.i("laixianfu", "service.showNavigationBar...");
+ service.showNavigationBar();
+ } catch (RemoteException e) {
+ // do nothing.
+ }
+ }
+ }
+ });
+ }
+
+ public void hideNavigationBar(){
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ IStatusBarService service = getStatusBarService();
+ if (service != null) {
+ try {
+ Log.i("laixianfu", "service.hideNavigationBar...");
+ service.hideNavigationBar();
+ } catch (RemoteException e) {
+ // do nothing.
+ }
+ }
+ }
+ });
+ }
+ //end
/**
* Read values from config.xml that may be overridden depending on
* the configuration of the device.*/
@@ -1098,7 +1144,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
int longSizeDp = longSize * DisplayMetrics.DENSITY_DEFAULT / density;
// Allow the navigation bar to move on small devices (phones).
- mNavigationBarCanMove = shortSizeDp < 600;
+ mNavigationBarCanMove = false ;//shortSizeDp < 600; laixianfu ++
mHasNavigationBar = res.getBoolean(com.android.internal.R.bool.config_showNavigationBar);
// Allow a system property to override this. Used by the emulator.
@@ -3917,6 +3970,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
if (keyCode == KeyEvent.KEYCODE_POWER) {
policyFlags |= WindowManagerPolicy.FLAG_WAKE;
}
+
final boolean isWakeKey = (policyFlags & (WindowManagerPolicy.FLAG_WAKE
| WindowManagerPolicy.FLAG_WAKE_DROPPED)) != 0;
b/base/policy/src/com/android/internal/policy/impl/SystemGesturesPointerEventListener.java
@@ -36,7 +36,8 @@ public class SystemGesturesPointerEventListener implements PointerEventListener
private static final int SWIPE_FROM_TOP = 1;
private static final int SWIPE_FROM_BOTTOM = 2;
private static final int SWIPE_FROM_RIGHT = 3;
-
+ private static final int SWIPE_FROM_BAR_TOP = 4;//laixianfu add
+
private final int mSwipeStartThreshold;
private final int mSwipeDistanceThreshold;
private final Callbacks mCallbacks;
@@ -99,6 +100,9 @@ public class SystemGesturesPointerEventListener implements PointerEventListener
} else if (swipe == SWIPE_FROM_RIGHT) {
if (DEBUG) Slog.d(TAG, "Firing onSwipeFromRight");
mCallbacks.onSwipeFromRight();
+
+ }else if(swipe == SWIPE_FROM_BAR_TOP){ //laixianfu add here
+ mCallbacks.onSwipeFromBarTop();
}
}
break;
@@ -175,6 +179,13 @@ public class SystemGesturesPointerEventListener implements PointerEventListener
&& elapsed < SWIPE_TIMEOUT_MS) {
return SWIPE_FROM_TOP;
}
+ //add by laixianfu :if
+ if (fromY >= screenHeight - 240
+ && y >= fromY + mSwipeStartThreshold
+ && elapsed < SWIPE_TIMEOUT_MS) {
+ android.util.Log.i("laixianfu", "detectSwipe...");
+ return SWIPE_FROM_BAR_TOP;
+ }
if (fromY >= screenHeight - mSwipeStartThreshold
&& y < fromY - mSwipeDistanceThreshold
&& elapsed < SWIPE_TIMEOUT_MS) {
@@ -193,5 +204,6 @@ public class SystemGesturesPointerEventListener implements PointerEventListener
void onSwipeFromBottom();
void onSwipeFromRight();
void onDebug();
+ void onSwipeFromBarTop();
}
}
b/base/services/java/com/android/server/StatusBarManagerService.java
@@ -657,5 +657,50 @@ public class StatusBarManagerService extends IStatusBarService.Stub
*/
}
};
+
+ //laixianfu add
+ @Override
+ public void showNavigationBar() {
+ enforceStatusBar();
+
+ android.util.Log.d("laixianfu", "status service showNavigationBar...");
+
+ synchronized(mLock) {
+ mHandler.post(new Runnable() {
+ public void run() {
+ try {
+ mBar.showNavigationBar();
+ } catch (RemoteException ex) {
+ }
+
+ }
+ });
+ }
+ }
+
+
+ @Override
+ public void hideNavigationBar() {
+ enforceStatusBar();
+
+ android.util.Log.d("laixianfu", "status service hideNavigationBar...");
+
+ synchronized(mLock) {
+ mHandler.post(new Runnable() {
+ public void run() {
+ try {
+ mBar.hideNavigationBar();
+ } catch (RemoteException ex) {
+ }
+
+ }
+ });
+ }
+ }
+ //end
+
+
}