Merge "Perform haptic feedback on nav button key press" into tm-qpr-dev am: 6663ebba3e
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/19053212 Change-Id: Ib0eac0bbd999ebaebcaafed1265987b252cd78bc Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -420,7 +420,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
return recentsCoords;
|
||||
}, new Handler());
|
||||
recentsButton.setOnClickListener(v -> {
|
||||
navButtonController.onButtonClick(BUTTON_RECENTS);
|
||||
navButtonController.onButtonClick(BUTTON_RECENTS, v);
|
||||
mHitboxExtender.onRecentsButtonClicked();
|
||||
});
|
||||
mPropertyHolders.add(new StatePropertyHolder(recentsButton,
|
||||
@@ -634,9 +634,9 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
buttonView.setImageResource(drawableId);
|
||||
buttonView.setContentDescription(parent.getContext().getString(
|
||||
navButtonController.getButtonContentDescription(buttonType)));
|
||||
buttonView.setOnClickListener(view -> navButtonController.onButtonClick(buttonType));
|
||||
buttonView.setOnClickListener(view -> navButtonController.onButtonClick(buttonType, view));
|
||||
buttonView.setOnLongClickListener(view ->
|
||||
navButtonController.onButtonLongClick(buttonType));
|
||||
navButtonController.onButtonLongClick(buttonType, view));
|
||||
return buttonView;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_S
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -113,7 +115,9 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa
|
||||
mHandler = handler;
|
||||
}
|
||||
|
||||
public void onButtonClick(@TaskbarButton int buttonType) {
|
||||
public void onButtonClick(@TaskbarButton int buttonType, View view) {
|
||||
// Provide the same haptic feedback that the system offers for virtual keys.
|
||||
view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
|
||||
switch (buttonType) {
|
||||
case BUTTON_BACK:
|
||||
logEvent(LAUNCHER_TASKBAR_BACK_BUTTON_TAP);
|
||||
@@ -144,7 +148,9 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa
|
||||
}
|
||||
}
|
||||
|
||||
public boolean onButtonLongClick(@TaskbarButton int buttonType) {
|
||||
public boolean onButtonLongClick(@TaskbarButton int buttonType, View view) {
|
||||
// Provide the same haptic feedback that the system offers for virtual keys.
|
||||
view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
|
||||
switch (buttonType) {
|
||||
case BUTTON_HOME:
|
||||
logEvent(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS);
|
||||
|
||||
+29
-26
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
@@ -58,6 +59,8 @@ public class TaskbarNavButtonControllerTest {
|
||||
TaskbarControllers mockTaskbarControllers;
|
||||
@Mock
|
||||
TaskbarActivityContext mockTaskbarActivityContext;
|
||||
@Mock
|
||||
View mockView;
|
||||
|
||||
private TaskbarNavButtonController mNavButtonController;
|
||||
|
||||
@@ -76,110 +79,110 @@ public class TaskbarNavButtonControllerTest {
|
||||
|
||||
@Test
|
||||
public void testPressBack() {
|
||||
mNavButtonController.onButtonClick(BUTTON_BACK);
|
||||
mNavButtonController.onButtonClick(BUTTON_BACK, mockView);
|
||||
verify(mockSystemUiProxy, times(1)).onBackPressed();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPressImeSwitcher() {
|
||||
mNavButtonController.onButtonClick(BUTTON_IME_SWITCH);
|
||||
mNavButtonController.onButtonClick(BUTTON_IME_SWITCH, mockView);
|
||||
verify(mockSystemUiProxy, times(1)).onImeSwitcherPressed();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPressA11yShortClick() {
|
||||
mNavButtonController.onButtonClick(BUTTON_A11Y);
|
||||
mNavButtonController.onButtonClick(BUTTON_A11Y, mockView);
|
||||
verify(mockSystemUiProxy, times(1))
|
||||
.notifyAccessibilityButtonClicked(DISPLAY_ID);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPressA11yLongClick() {
|
||||
mNavButtonController.onButtonLongClick(BUTTON_A11Y);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_A11Y, mockView);
|
||||
verify(mockSystemUiProxy, times(1)).notifyAccessibilityButtonLongClicked();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLongPressHome() {
|
||||
mNavButtonController.onButtonLongClick(BUTTON_HOME);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_HOME, mockView);
|
||||
verify(mockSystemUiProxy, times(1)).startAssistant(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPressHome() {
|
||||
mNavButtonController.onButtonClick(BUTTON_HOME);
|
||||
mNavButtonController.onButtonClick(BUTTON_HOME, mockView);
|
||||
verify(mockCommandHelper, times(1)).addCommand(TYPE_HOME);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPressRecents() {
|
||||
mNavButtonController.onButtonClick(BUTTON_RECENTS);
|
||||
mNavButtonController.onButtonClick(BUTTON_RECENTS, mockView);
|
||||
verify(mockCommandHelper, times(1)).addCommand(TYPE_TOGGLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPressRecentsWithScreenPinned() {
|
||||
mNavButtonController.updateSysuiFlags(SYSUI_STATE_SCREEN_PINNING);
|
||||
mNavButtonController.onButtonClick(BUTTON_RECENTS);
|
||||
mNavButtonController.onButtonClick(BUTTON_RECENTS, mockView);
|
||||
verify(mockCommandHelper, times(0)).addCommand(TYPE_TOGGLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLongPressBackRecentsNotPinned() {
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS, mockView);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK, mockView);
|
||||
verify(mockSystemUiProxy, times(0)).stopScreenPinning();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLongPressBackRecentsPinned() {
|
||||
mNavButtonController.updateSysuiFlags(SYSUI_STATE_SCREEN_PINNING);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS, mockView);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK, mockView);
|
||||
verify(mockSystemUiProxy, times(1)).stopScreenPinning();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLongPressBackRecentsTooLongPinned() {
|
||||
mNavButtonController.updateSysuiFlags(SYSUI_STATE_SCREEN_PINNING);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS, mockView);
|
||||
try {
|
||||
Thread.sleep(SCREEN_PIN_LONG_PRESS_THRESHOLD + 5);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK, mockView);
|
||||
verify(mockSystemUiProxy, times(0)).stopScreenPinning();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLongPressBackRecentsMultipleAttemptPinned() {
|
||||
mNavButtonController.updateSysuiFlags(SYSUI_STATE_SCREEN_PINNING);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS, mockView);
|
||||
try {
|
||||
Thread.sleep(SCREEN_PIN_LONG_PRESS_THRESHOLD + 5);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK, mockView);
|
||||
verify(mockSystemUiProxy, times(0)).stopScreenPinning();
|
||||
|
||||
// Try again w/in threshold
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS, mockView);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK, mockView);
|
||||
verify(mockSystemUiProxy, times(1)).stopScreenPinning();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLongPressHomeScreenPinned() {
|
||||
mNavButtonController.updateSysuiFlags(SYSUI_STATE_SCREEN_PINNING);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_HOME);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_HOME, mockView);
|
||||
verify(mockSystemUiProxy, times(0)).startAssistant(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNoCallsToNullLogger() {
|
||||
mNavButtonController.onButtonClick(BUTTON_HOME);
|
||||
mNavButtonController.onButtonClick(BUTTON_HOME, mockView);
|
||||
verify(mockStatsLogManager, times(0)).logger();
|
||||
verify(mockStatsLogger, times(0)).log(any());
|
||||
}
|
||||
@@ -187,9 +190,9 @@ public class TaskbarNavButtonControllerTest {
|
||||
@Test
|
||||
public void testNoCallsAfterNullingOut() {
|
||||
mNavButtonController.init(mockTaskbarControllers);
|
||||
mNavButtonController.onButtonClick(BUTTON_HOME);
|
||||
mNavButtonController.onButtonClick(BUTTON_HOME, mockView);
|
||||
mNavButtonController.onDestroy();
|
||||
mNavButtonController.onButtonClick(BUTTON_HOME);
|
||||
mNavButtonController.onButtonClick(BUTTON_HOME, mockView);
|
||||
verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_HOME_BUTTON_TAP);
|
||||
verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS);
|
||||
}
|
||||
@@ -197,7 +200,7 @@ public class TaskbarNavButtonControllerTest {
|
||||
@Test
|
||||
public void testLogOnTap() {
|
||||
mNavButtonController.init(mockTaskbarControllers);
|
||||
mNavButtonController.onButtonClick(BUTTON_HOME);
|
||||
mNavButtonController.onButtonClick(BUTTON_HOME, mockView);
|
||||
verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_HOME_BUTTON_TAP);
|
||||
verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS);
|
||||
}
|
||||
@@ -205,7 +208,7 @@ public class TaskbarNavButtonControllerTest {
|
||||
@Test
|
||||
public void testLogOnLongpress() {
|
||||
mNavButtonController.init(mockTaskbarControllers);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_HOME);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_HOME, mockView);
|
||||
verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS);
|
||||
verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_HOME_BUTTON_TAP);
|
||||
}
|
||||
@@ -213,11 +216,11 @@ public class TaskbarNavButtonControllerTest {
|
||||
@Test
|
||||
public void testBackOverviewLogOnLongpress() {
|
||||
mNavButtonController.init(mockTaskbarControllers);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_RECENTS, mockView);
|
||||
verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS);
|
||||
verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP);
|
||||
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK);
|
||||
mNavButtonController.onButtonLongClick(BUTTON_BACK, mockView);
|
||||
verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS);
|
||||
verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_BACK_BUTTON_TAP);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user