summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2018-03-03 00:36:28 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-03-03 00:36:28 +0000
commitdd33df2393f62e405206233163f32cc0da9f7066 (patch)
tree753023895e2243363dd3b7225db02e6c8530b2cb
parentb87a7a749c7c3578b21fc6781b53539e5bac603d (diff)
parent64543e668f3f044916363f586f27161004bf3c4b (diff)
Merge "Prevent nav bar vibrations when overview proxy is connected (1/2)"
-rw-r--r--core/java/android/view/IWindowManager.aidl5
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java7
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java10
-rw-r--r--services/core/java/com/android/server/policy/WindowManagerPolicy.java5
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java12
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java4
8 files changed, 52 insertions, 7 deletions
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 914ba0c673aa..75940e8b6129 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -283,6 +283,11 @@ interface IWindowManager
*/
oneway void setPipVisibility(boolean visible);
+ /**
+ * Called by System UI to enable or disable haptic feedback on the navigation bar buttons.
+ */
+ void setNavBarVirtualKeyHapticFeedbackEnabled(boolean enabled);
+
/**
* Device has a software navigation bar (separate from the status bar).
*/
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java
index 5b49e67f5492..a9c80c62e998 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java
@@ -109,4 +109,16 @@ public class WindowManagerWrapper {
Log.w(TAG, "Failed to end prolonged animations: ", e);
}
}
+
+ /**
+ * Enable or disable haptic feedback on the navigation bar buttons.
+ */
+ public void setNavBarVirtualKeyHapticFeedbackEnabled(boolean enabled) {
+ try {
+ WindowManagerGlobal.getWindowManagerService()
+ .setNavBarVirtualKeyHapticFeedbackEnabled(enabled);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed to enable or disable navigation bar button haptics: ", e);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
index 0ed69e66b03e..da042d2bb8ce 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -46,7 +46,6 @@ import android.database.ContentObserver;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.AnimatedVectorDrawable;
-import android.graphics.drawable.Drawable;
import android.inputmethodservice.InputMethodService;
import android.os.Binder;
import android.os.Bundle;
@@ -88,6 +87,7 @@ import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
import com.android.systemui.recents.Recents;
import com.android.systemui.recents.misc.SysUiTaskStackChangeListener;
import com.android.systemui.shared.system.ActivityManagerWrapper;
+import com.android.systemui.shared.system.WindowManagerWrapper;
import com.android.systemui.stackdivider.Divider;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.CommandQueue.Callbacks;
@@ -165,6 +165,8 @@ public class NavigationBarFragment extends Fragment implements Callbacks {
public void onConnectionChanged(boolean isConnected) {
mNavigationBarView.onOverviewProxyConnectionChanged(isConnected);
updateScreenPinningGestures();
+ WindowManagerWrapper.getInstance()
+ .setNavBarVirtualKeyHapticFeedbackEnabled(!isConnected);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
index e7b802d0067f..aec05cd9218f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
@@ -232,12 +232,7 @@ public class KeyButtonView extends ImageView implements ButtonInterface {
performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
}
mIsPressed = true;
- if (isProxyConnected) {
- // Provide small vibration for quick step or immediate down feedback
- AsyncTask.execute(() ->
- mVibrator.vibrate(VibrationEffect
- .get(VibrationEffect.EFFECT_TICK, false)));
- } else {
+ if (!isProxyConnected) {
playSoundEffect(SoundEffectConstants.CLICK);
setPressed(mIsPressed);
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index eaa17ca104cb..ab0779b8fb33 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -541,6 +541,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
volatile boolean mGoingToSleep;
volatile boolean mRequestedOrGoingToSleep;
volatile boolean mRecentsVisible;
+ volatile boolean mNavBarVirtualKeyHapticFeedbackEnabled;
volatile boolean mPictureInPictureVisible;
// Written by vr manager thread, only read in this class.
volatile private boolean mPersistentVrModeEnabled;
@@ -4368,6 +4369,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
@Override
+ public void setNavBarVirtualKeyHapticFeedbackEnabledLw(boolean enabled) {
+ mNavBarVirtualKeyHapticFeedbackEnabled = enabled;
+ }
+
+ @Override
public int adjustSystemUiVisibilityLw(int visibility) {
mStatusBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);
mNavigationBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);
@@ -5892,8 +5898,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
return result;
}
+ // Enable haptics if down and virtual key without multiple repetitions. If this is a hard
+ // virtual key such as a navigation bar button, only vibrate if flag is enabled.
+ final boolean isNavBarVirtKey = ((event.getFlags() & KeyEvent.FLAG_VIRTUAL_HARD_KEY) != 0);
boolean useHapticFeedback = down
&& (policyFlags & WindowManagerPolicy.FLAG_VIRTUAL) != 0
+ && (!isNavBarVirtKey || mNavBarVirtualKeyHapticFeedbackEnabled)
&& event.getRepeatCount() == 0;
// Handle special keys.
diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java
index a07f5eb09ab7..ab331a5263c8 100644
--- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java
+++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java
@@ -1531,6 +1531,11 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants {
void setPipVisibilityLw(boolean visible);
/**
+ * Called by System UI to enable or disable haptic feedback on the navigation bar buttons.
+ */
+ void setNavBarVirtualKeyHapticFeedbackEnabledLw(boolean enabled);
+
+ /**
* Specifies whether there is an on-screen navigation bar separate from the status bar.
*/
public boolean hasNavigationBar();
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 0c6429a30db9..78c04e8e6a2c 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -5922,6 +5922,18 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
+ public void setNavBarVirtualKeyHapticFeedbackEnabled(boolean enabled) {
+ if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Caller does not hold permission "
+ + android.Manifest.permission.STATUS_BAR);
+ }
+
+ synchronized (mWindowMap) {
+ mPolicy.setNavBarVirtualKeyHapticFeedbackEnabledLw(enabled);
+ }
+ }
+
// TODO(multidisplay): StatusBar on multiple screens?
private boolean updateStatusBarVisibilityLocked(int visibility) {
if (mLastDispatchedSystemUiVisibility == visibility) {
diff --git a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
index 206ee7af2966..34c5db3c220b 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
@@ -637,6 +637,10 @@ class TestWindowManagerPolicy implements WindowManagerPolicy {
}
@Override
+ public void setNavBarVirtualKeyHapticFeedbackEnabledLw(boolean enabled) {
+ }
+
+ @Override
public void onSystemUiStarted() {
}