Pass down whether iterating through tasks in overview is in forward or

backward direction

We are redesigning the alt tab experience and will allow user to iterate
through all the apps in forward and backward directions
Alt+Tab: backward, most recent to least recent
Shift+Alt+Tab: forward, least recent to most recent

Bug: 258854035
Test: manual
Change-Id: Ic274fbb38c73865e18e95a835d5f85ad406616ba
This commit is contained in:
Tracy Zhou
2023-01-10 22:24:53 +00:00
parent 58e0840648
commit fd0e60e6e0
10 changed files with 44 additions and 35 deletions

View File

@@ -53,7 +53,7 @@ oneway interface IStatusBar
boolean showImeSwitcher);
void setWindowState(int display, int window, int state);
void showRecentApps(boolean triggeredFromAltTab);
void showRecentApps(boolean triggeredFromAltTab, boolean forward);
void hideRecentApps(boolean triggeredFromAltTab, boolean triggeredFromHomeKey);
void toggleRecentApps();
void toggleSplitScreen();

View File

@@ -37,7 +37,7 @@ oneway interface IOverviewProxy {
/**
* Sent when overview is to be shown.
*/
void onOverviewShown(boolean triggeredFromAltTab) = 7;
void onOverviewShown(boolean triggeredFromAltTab, boolean forward) = 7;
/**
* Sent when overview is to be hidden.

View File

@@ -59,11 +59,11 @@ public class OverviewProxyRecentsImpl implements RecentsImplementation {
}
@Override
public void showRecentApps(boolean triggeredFromAltTab) {
public void showRecentApps(boolean triggeredFromAltTab, boolean forward) {
IOverviewProxy overviewProxy = mOverviewProxyService.getProxy();
if (overviewProxy != null) {
try {
overviewProxy.onOverviewShown(triggeredFromAltTab);
overviewProxy.onOverviewShown(triggeredFromAltTab, forward);
} catch (RemoteException e) {
Log.e(TAG, "Failed to send overview show event to launcher.", e);
}

View File

@@ -65,14 +65,14 @@ public class Recents implements CoreStartable, CommandQueue.Callbacks {
}
@Override
public void showRecentApps(boolean triggeredFromAltTab) {
public void showRecentApps(boolean triggeredFromAltTab, boolean forward) {
// Ensure the device has been provisioned before allowing the user to interact with
// recents
if (!isUserSetup()) {
return;
}
mImpl.showRecentApps(triggeredFromAltTab);
mImpl.showRecentApps(triggeredFromAltTab, forward);
}
@Override

View File

@@ -31,7 +31,7 @@ public interface RecentsImplementation {
default void preloadRecentApps() {}
default void cancelPreloadRecentApps() {}
default void showRecentApps(boolean triggeredFromAltTab) {}
default void showRecentApps(boolean triggeredFromAltTab, boolean forward) {}
default void hideRecentApps(boolean triggeredFromAltTab, boolean triggeredFromHomeKey) {}
default void toggleRecentApps() {}

View File

@@ -224,7 +224,7 @@ public class CommandQueue extends IStatusBar.Stub implements
*/
default void setImeWindowStatus(int displayId, IBinder token, int vis,
@BackDispositionMode int backDisposition, boolean showImeSwitcher) { }
default void showRecentApps(boolean triggeredFromAltTab) { }
default void showRecentApps(boolean triggeredFromAltTab, boolean forward) { }
default void hideRecentApps(boolean triggeredFromAltTab, boolean triggeredFromHomeKey) { }
default void toggleRecentApps() { }
default void toggleSplitScreen() { }
@@ -686,11 +686,11 @@ public class CommandQueue extends IStatusBar.Stub implements
}
}
public void showRecentApps(boolean triggeredFromAltTab) {
public void showRecentApps(boolean triggeredFromAltTab, boolean forward) {
synchronized (mLock) {
mHandler.removeMessages(MSG_SHOW_RECENT_APPS);
mHandler.obtainMessage(MSG_SHOW_RECENT_APPS, triggeredFromAltTab ? 1 : 0, 0,
null).sendToTarget();
mHandler.obtainMessage(MSG_SHOW_RECENT_APPS, triggeredFromAltTab ? 1 : 0,
forward ? 1 : 0, null).sendToTarget();
}
}
@@ -1384,7 +1384,7 @@ public class CommandQueue extends IStatusBar.Stub implements
break;
case MSG_SHOW_RECENT_APPS:
for (int i = 0; i < mCallbacks.size(); i++) {
mCallbacks.get(i).showRecentApps(msg.arg1 != 0);
mCallbacks.get(i).showRecentApps(msg.arg1 != 0, msg.arg2 != 0);
}
break;
case MSG_HIDE_RECENT_APPS:

View File

@@ -209,9 +209,9 @@ public class CommandQueueTest extends SysuiTestCase {
@Test
public void testShowRecentApps() {
mCommandQueue.showRecentApps(true);
mCommandQueue.showRecentApps(true, false);
waitForIdleSync();
verify(mCallbacks).showRecentApps(eq(true));
verify(mCallbacks).showRecentApps(eq(true), eq(false));
}
@Test

View File

@@ -661,7 +661,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
dispatchMediaKeyRepeatWithWakeLock((KeyEvent)msg.obj);
break;
case MSG_DISPATCH_SHOW_RECENTS:
showRecentApps(false);
showRecents();
break;
case MSG_DISPATCH_SHOW_GLOBAL_ACTIONS:
showGlobalActionsInternal();
@@ -2910,7 +2910,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
break;
case KeyEvent.KEYCODE_RECENT_APPS:
if (down && repeatCount == 0) {
showRecentApps(false /* triggeredFromAltTab */);
showRecents();
}
return key_consumed;
case KeyEvent.KEYCODE_APP_SWITCH:
@@ -3094,22 +3094,23 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
break;
case KeyEvent.KEYCODE_TAB:
if (down && event.isMetaPressed()) {
if (!keyguardOn && isUserSetupComplete()) {
showRecentApps(false);
return key_consumed;
}
} else if (down && repeatCount == 0) {
// Display task switcher for ALT-TAB.
if (mRecentAppsHeldModifiers == 0 && !keyguardOn && isUserSetupComplete()) {
final int shiftlessModifiers =
event.getModifiers() & ~KeyEvent.META_SHIFT_MASK;
if (KeyEvent.metaStateHasModifiers(
shiftlessModifiers, KeyEvent.META_ALT_ON)) {
mRecentAppsHeldModifiers = shiftlessModifiers;
showRecentApps(true);
if (down) {
if (event.isMetaPressed()) {
if (!keyguardOn && isUserSetupComplete()) {
showRecents();
return key_consumed;
}
} else {
// Display task switcher for ALT-TAB.
if (mRecentAppsHeldModifiers == 0 && !keyguardOn && isUserSetupComplete()) {
final int modifiers = event.getModifiers();
if (KeyEvent.metaStateHasModifiers(modifiers, KeyEvent.META_ALT_ON)) {
mRecentAppsHeldModifiers = modifiers;
showRecentsFromAltTab(KeyEvent.metaStateHasModifiers(modifiers,
KeyEvent.META_SHIFT_ON));
return key_consumed;
}
}
}
}
break;
@@ -3646,11 +3647,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mHandler.obtainMessage(MSG_DISPATCH_SHOW_RECENTS).sendToTarget();
}
private void showRecentApps(boolean triggeredFromAltTab) {
private void showRecents() {
mPreloadedRecentApps = false; // preloading no longer needs to be canceled
StatusBarManagerInternal statusbar = getStatusBarManagerInternal();
if (statusbar != null) {
statusbar.showRecentApps(triggeredFromAltTab);
statusbar.showRecentApps(false /* triggeredFromAltTab */, false /* forward */);
}
}
private void showRecentsFromAltTab(boolean forward) {
mPreloadedRecentApps = false; // preloading no longer needs to be canceled
StatusBarManagerInternal statusbar = getStatusBarManagerInternal();
if (statusbar != null) {
statusbar.showRecentApps(true /* triggeredFromAltTab */, forward);
}
}

View File

@@ -39,7 +39,7 @@ public interface StatusBarManagerInternal {
void cancelPreloadRecentApps();
void showRecentApps(boolean triggeredFromAltTab);
void showRecentApps(boolean triggeredFromAltTab, boolean forward);
void hideRecentApps(boolean triggeredFromAltTab, boolean triggeredFromHomeKey);

View File

@@ -454,10 +454,10 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
}
@Override
public void showRecentApps(boolean triggeredFromAltTab) {
public void showRecentApps(boolean triggeredFromAltTab, boolean forward) {
if (mBar != null) {
try {
mBar.showRecentApps(triggeredFromAltTab);
mBar.showRecentApps(triggeredFromAltTab, forward);
} catch (RemoteException ex) {}
}
}